home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1992 June: ROMin Holiday / ADC Developer CD (1992-06) (''ROMin Holiday'')_iso / Developer Connection - 06-1992.iso / Development Platforms / Apple II / Essentials / SANE / SANE1 / A2X.BANKSW next >
Encoding:
Text File  |  1985-11-07  |  4.6 KB  |  107 lines  |  [TEXT/pdos]

  1. ;----------------------------------------------------------------------
  2. ; A2X.BANKSW  ------------                                             |
  3. ;
  4. ; Copyright Apple Computer, Inc. 1984, 1985
  5. ; All Rights Reserved
  6. ;                                                                      |
  7. ; * This file is for the assembly language programmer who is using     |
  8. ;      both main banks of memory in a 128K Apple //.  It allows the    |
  9. ;      program and its data to reside in different banks.              |
  10. ;                                                                      |
  11. ; * The soft switches RAMRD and RAMWRT ($C00X and $C01X) are used in   |
  12. ;      the assembly code below.  See the Apple // Reference Manual,    |
  13. ;      page 75, for details.                                           |
  14. ;                                                                      |
  15. ; * To use this routine:                                               |
  16. ;      1)  Store the number of the bank containing data at $FFFD.      |
  17. ;      2)  DO NOT make calls to FP6502 at $E000 as usual.  Instead     |
  18. ;          change your code to enter at $FF80.  (FP6502  EQU  $FF80)   |
  19. ;                                                                      |
  20. ;                                                                      |
  21. ; * NOTE : Using this routine REQUIRES that the byte DATABANK          |
  22. ;          at $FFFD be preset by the user to either:                   |
  23. ;                    0 - Data in Main memory bank    or                |
  24. ;                    1 - Data in Alternate memory bank.                |
  25. ;                                                                      |
  26. ; * This is a sample file.  If additional code is required, this       |
  27. ;      routine can be expanded to a maximum of 126 bytes - it must     |
  28. ;      begin at or after $FF80 and must not interfere with $FFFE/FFFF. |
  29. ;                                                                      |
  30. ;                                                                      |
  31. ; MODULES:                                                             |
  32. ;      1.   REMOVE RETURN ADDRESS FROM STACK AND SAVE.                 |
  33. ;      2.   SAVE CURRENT STATE OF BANK SWITCHES.                       |
  34. ;      3.   SWITCH TO DATA BANK.                                       |
  35. ;      4.   JSR TO THE REAL FP6502 AT $E000.                           |
  36. ;      5.   SET BANK SWITCHES BACK TO ORIGINAL STATE.                  |
  37. ;      6.   PUT RETURN ADDRESS ON THE STACK AND RTS TO CALLER.         |
  38. ;                                                                      |
  39. ;---------------------------------------------------------------------- 
  40. ;
  41.  ORG $FF80
  42. ;
  43. ; data bank byte (0 or 1) must be previously loaded at $FFFD.
  44. ;
  45. DATABANK EQU $FFFD
  46. SANE EQU $E000
  47. ;
  48. ;------------------------------------------------
  49. ; 1.   REMOVE RETURN ADDRESS FROM STACK AND SAVE.
  50. ;------------------------------------------------
  51.  PLA  ;save return address in RETURN
  52.  STA RETURN ;   (see end of program).
  53.  PLA
  54.  STA RETURN+1
  55. ;
  56. ;------------------------------------------
  57. ; 2.   SAVE CURRENT STATE OF BANK SWITCHES.
  58. ;------------------------------------------
  59.  LDA #0 ;record current bank arrangement as
  60.  STA CALRDBNK ;       0 , for main memory.
  61.  STA CALWRTBNK
  62.  LDA $C013 ;check for actual readbank.
  63.  BPL NEXT ;       if main was correct, go on
  64.  INC CALRDBNK ;      else readbank was bank 1.
  65. NEXT LDA $C014 ;check for actual writebank.
  66.  BPL SWITCH ;       if main was correct, go on
  67.  INC CALWRTBNK ;       else writebank was bank 1.
  68. ;
  69. ;--------------------------
  70. ; 3.   SWITCH TO DATA BANK.
  71. ;--------------------------
  72. SWITCH LDX DATABANK 
  73.  STA $C002,X ;X=0 ==> read main,    X=1 ==> read aux. 
  74.  STA $C004,X ;X=0 ==> write main,   X=1 ==> write aux. 
  75. ;
  76. ;--------------------------------------
  77. ; 4.   JSR TO THE REAL FP6502 AT $E000.
  78. ;--------------------------------------
  79.  JSR SANE
  80. ;
  81. ;-----------------------------------------------
  82. ; 5.   SET BANK SWITCHES BACK TO ORIGINAL STATE.
  83. ;-----------------------------------------------
  84.  LDX CALRDBNK 
  85.  STA $C002,X ;X=0 ==> read main,   X=1 ==> read aux.  
  86.  LDX CALWRTBNK
  87.  STA $C004,X ;X=0 ==> write main,  X=1 ==> write aux.  
  88. ;
  89. ;
  90. ;--------------------------------------------------------
  91. ; 6.   PUT RETURN ADDRESS ON THE STACK AND RTS TO CALLER.
  92. ;--------------------------------------------------------
  93.  LDA RETURN+1 
  94.  PHA
  95.  LDA RETURN
  96.  PHA
  97. ;
  98.  RTS
  99. ;
  100. ;------------------------------------------------------------
  101. ; **   STORAGE FOR RETURN ADDRESS AND STATE OF SOFT SWITCHES.
  102. ;------------------------------------------------------------
  103. RETURN DW 0 ;Store return address here.
  104. CALRDBNK DB 0 ;Caller Read Bank.
  105. CALWRTBNK DB 0 ;Caller Write Bank. 
  106.  
  107.